﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MyFluentNHibernate;
using NHibernate;
using MyNHibernate;
using EntityModel;

namespace NHibernateTest
{
    /// <summary>
    /// UnitTest1 的摘要说明
    /// </summary>
    [TestClass]
    public class UnitTest1
    {
        public UnitTest1()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///获取或设置测试上下文，该上下文提供
        ///有关当前测试运行及其功能的信息。
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region 附加测试属性
        //
        // 编写测试时，还可使用以下附加属性:
        //
        // 在运行类中的第一个测试之前使用 ClassInitialize 运行代码
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // 在类中的所有测试都已运行之后使用 ClassCleanup 运行代码
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // 在运行每个测试之前，使用 TestInitialize 来运行代码
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // 在每个测试运行完之后，使用 TestCleanup 来运行代码
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void NHibernateFactory()
        {
            var factory = TradSessionFactory.GetCurrentFactory();
            using (var session = factory.OpenSession())
            {
                //Order order = session.Load<Order>(1);
                //Assert.AreEqual(OrderState.Created, order.State);
                //Assert.AreEqual(200, order.Price);
            }
        }

        [TestMethod]
        public void FluentCreateData()
        {
            var factory = FluentSessionFactory.GetCurrentFactory();
            using (var session = factory.OpenSession())
            {
                Product nokia = new MobileProduct()
                {
                    Brand = "Nokia",
                    Number = "N91",
                    CreateTime = DateTime.Now,
                    Price = 5600,
                    Name = "Nokia N91 Mobile"
                };

                session.Save(nokia);

                Product book = new BookProduct()
                {
                    Author = "六六",
                    CreateTime = DateTime.Now,
                    Price = 20,
                    Name = "蜗居"
                };

                session.Save(book);
            }
        }

        [TestMethod]
        public void FluentSeleteData()
        {
            var factory = FluentSessionFactory.GetCurrentFactory();
            using (var session = factory.OpenSession())
            {
                var product = session.CreateCriteria<BookProduct>().List<BookProduct>().FirstOrDefault();

                Assert.AreEqual("蜗居", product.Name);
                Assert.AreEqual(20, product.Price);
            }
        }
    }
}
